/**
 * Description:
 * Class Name:StringJoinTest
 * Date:2022/1/29 11:43
 *
 * @author LTisme
 * @version JAVA17
 */
package 疯狂Java讲义.第6章_面向对象_下._6_4_final修饰符;

public class StringJoinTest {
    public static void main(String[] args) {
        var s1 = "疯狂Java";
        // s2 变量引用的字符串可以在编译时就确定下来，因此s2直接引用常量池中已有的"疯狂Java"字符串
        var s2 = "疯狂" + "Java";
        System.out.println(s1 == s2);       // 输出true

        var str1 = "疯狂";
        var str2 = "Java";
        var s3 = str1 + str2;				// 用两个str1，str2普通变量进行拼接，编译器无法编译时确定s3的值，也就无法让s3指向常量池中的"疯狂Java"
        System.out.println(s1 == s3);       // 输出false

        final var s4 = "疯狂";
        final var s5 = "Java";              // final修饰，进行了宏替换，这样编译器在编译阶段就确定了s4和s5的值
        var s6 = s4 + s5;                   // s6从而也就确定了下来
        System.out.println(s1 == s6);       // 输出true
    }
}
